#使用队列进行数据交换
import multiprocessing
import random
import time

class producer(multiprocessing.Process):
    def __init__(self, queue):
        multiprocessing.Process.__init__(self)
        self.queue = queue

    def run(self) :
        for i in range(10):
            item = random.randint(0, 256)
            self.queue.put(item)
            print ("Process Producer : item %d appended to queue %s"% (item,self.name))
            time.sleep(1)
            print ("The size of queue is %s" % self.queue.qsize())#mac使用会报错

class consumer(multiprocessing.Process):
    def __init__(self, queue):
        multiprocessing.Process.__init__(self)
        self.queue = queue

    def run(self):
        while True:
            if (self.queue.empty()):#判断队列中是否是空的
                print("the queue is empty")
                break
            else :
                time.sleep(2)#显然消费者消耗的时间要比生产者生产的时间要长
                item = self.queue.get()#队列使用的是先进先出，先进入队列的数据会先获得，两个进程共享数据
                print ('Process Consumer : item %d popped from by %s \n' % (item, self.name))
                time.sleep(1)


if __name__ == '__main__':
    #queue提供了一个子类，joinablequeue,该类里面提供了task_done,join等
        #queue = multiprocessing.Queue()#mac不能用
        queue=multiprocessing.Manager().Queue()#这种方法下可用
        process_producer = producer(queue)
        process_consumer = consumer(queue)
        process_producer.start()
        process_consumer.start()
        process_producer.join()
        process_consumer.join()